Podfile 语法改变
CocoaPods 1.0版本有一些改变, 会直接让现在已有的 Podfile 不能工作:
- 必须指明
target
:exclusive => true
和 link_with
被去掉了
pod install
默认不再进行 pod repo update
inhibit_all_warnings!
inhibit_all_warnings!
屏蔽所有来自于cocoapods依赖库的警告。你可以全局定义,也能在子target里面定义,也可以指定某一个库:
# 隐藏SSZipArchive的警告而不隐藏ShowTVAuth的警告 pod 'SSZipArchive', :inhibit_warnings => true pod 'ShowTVAuth', :inhibit_warnings => false
|
Build configurations(编译配置)
默认情况下, 依赖项会被安装在所有target的build configuration中。为了调试或者处于其他原因,依赖项只能在给定的build configuration中被启用。
下面写法指明只有在Debug和Beta模式下才有启用配置:
pod 'DebugFramework', :configurations => ['Debug', 'Beta']
|
或者,可以弄白名单只指定一个build configurations。
pod 'DebugFramework', :configuration => 'Debug'
|
Subspecs
一般情况我们会通过依赖库的名称来引入,cocoapods会默认安装依赖库的所有内容。
我们也可以指定安装具体依赖库的某个子模块,例如:
# 仅安装QueryKit库下的Attribute模块 pod 'QueryKit/Attribute' # 仅安装QueryKit下的Attribute和QuerySet模块 pod 'QueryKit', :subspecs => ['Attribute', 'QuerySet']
|
Using the files from a local path (使用本地文件)
pod 'AFNetworking', :path => '~/Documents/AFNetworking'
|
有时我们需要引入依赖库指定的分支或节点,写法如下。
引入master分支(默认)
pod 'AFNetworking', :git => 'https://github.com/gowalla/AFNetworking.git'
|
引入指定的分支
pod 'AFNetworking', :git => 'https://github.com/gowalla/AFNetworking.git', :branch => 'dev'
|
引入某个节点的代码
pod 'AFNetworking', :git => 'https://github.com/gowalla/AFNetworking.git', :tag => '0.7.0'
|
引入某个特殊的提交节点
pod 'AFNetworking', :git => 'https://github.com/gowalla/AFNetworking.git', :commit => '082f8319af
|
target
在给定的块内定义pod的target(Xcode工程中的target)和指定依赖的范围。一个target应该与Xcode工程的target有关联。默认情况下,target会包含定义在块外的依赖,除非指定不使用inherit!
来继承(说的是嵌套的块里的继承问题)
定义一个简单target ZipApp引入SSZipArchive库
target 'ZipApp' do pod 'SSZipArchive' end
|
定义一个ZipApptarget仅引入SSZipArchive库,定义ZipAppTeststarget 引入Nimble的同时也会继承ZipApptarget里面的SSZipArchive库
target 'ZipApp' do pod 'SSZipArchive' target 'ZipAppTests' do inherit! :search_paths pod 'Nimble' end end
|
target块中嵌套多个子块
target 'ShowsApp' do # ShowsApp 仅仅引入ShowsKit pod 'ShowsKit' # 引入 ShowsKit 和 ShowTVAuth target 'ShowsTV' do pod 'ShowTVAuth' end # 引入了Specta和Expecta以及ShowsKit target 'ShowsTests' do inherit! :search_paths pod 'Specta' pod 'Expecta' end end
|
抽象target
定义一个新的抽象目标,它可以方便的用于目标依赖继承。
简单写法
abstract_target 'Networking' do pod 'AlamoFire' target 'Networking App 1' target 'Networking App 2' end
|
定义一种abstract_target包含多个target
# 注意:这是个抽象的target也就是说在工程中并没有这个target引入ShowsKit abstract_target 'Shows' do pod 'ShowsKit' # ShowsiOS target会引入ShowWebAuth库以及继承自Shows的ShowsKit库 target 'ShowsiOS' do pod 'ShowWebAuth' end # ShowsTV target会引入ShowTVAuth库以及继承自Shows的ShowsKit库 target 'ShowsTV' do pod 'ShowTVAuth' end # ShowsTests target引入了Specta和Expecta库,并且指明继承Shows,所以也会引入ShowsKit target 'ShowsTests' do inherit! :search_paths pod 'Specta' pod 'Expecta' end end
|
abstract! 和 inherit!
abstract!
指示当前的target是抽象的,因此不会直接链接Xcode target。
inherit!
设置当前target的继承模式。例如:
target 'App' do target 'AppTests' do inherit! :search_paths end end
|